package br.com.esporte.apresentacao.grupoEsporteGrupo.diaPraticado.cadastro;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.wicket.Component;
import org.apache.wicket.datetime.StyleDateConverter;
import org.apache.wicket.datetime.markup.html.form.DateTextField;
import org.apache.wicket.extensions.yui.calendar.DatePicker;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.PropertyModel;

import br.com.esporte.apresentacao.infra.componente.menu.MenuComponente;
import br.com.esporte.apresentacao.infra.componente.menu.MenuEnum;
import br.com.esporte.apresentacao.infra.componente.menu.MenuPagina;
import br.com.esporte.apresentacao.infra.generic.Pagina;
import br.com.esporte.apresentacao.infra.template.entidade.PaginaEntidadeGrupo;
import br.com.esporte.negocios.entidade.imp.DiaPraticadoGrupo;
import br.com.esporte.negocios.entidade.imp.GrupoEsporteGrupo;
import br.com.esporte.negocios.entidade.util.HoraEnum;
import br.com.esporte.negocios.entidade.util.MinutoEnum;
import br.com.esporte.negocios.util.Util;

/**
 * 
 * @author Milton Domingues
 *
 */
public class PaginaCadastroDiaPraticadoGrupo extends PaginaEntidadeGrupo<DiaPraticadoGrupo, GrupoEsporteGrupo> {

	private static final long serialVersionUID = 3622079293315541073L;

	private Date dataPraticado;
	private HoraEnum horaInicio;
	private MinutoEnum minutoInicio;
	private HoraEnum horaFim;
	private MinutoEnum minutoFim;


	public PaginaCadastroDiaPraticadoGrupo(DiaPraticadoGrupo dia, GrupoEsporteGrupo grupo, Pagina paginaRetorno, MenuEnum menu) {
		super(dia, grupo, paginaRetorno, menu);
		this.montarPagina();
	}

	@Override
	protected void acaoSalvar(){
		this.getVo().setGrupo(this.getGrupo());
		this.popularDiaPraticado(this.getVo());
		if(this.isUpdate()){
			this.getFachada().alterarDiaPraticadoGrupo(this.getVo(), this.getUsuarioLogado());
		}else{
			this.getFachada().inserirDiaPraticadoGrupo(this.getVo(), this.getUsuarioLogado());
		}
		this.setResponsePage(this.getPaginaRetorno());
	}

	private Button criarBtSalvar(){
		Button botao = new Button("btSalvar"){

			private static final long serialVersionUID = -3960483125623050680L;

			@Override
			public void onSubmit() {
				PaginaCadastroDiaPraticadoGrupo.this.acaoSalvar();
			}
		};
		return botao;
	}

	private DateTextField criarData(){
		DateTextField data = new DateTextField("data", new PropertyModel<Date>(this,"dataPraticado"), new StyleDateConverter("S-", true));
		DatePicker datePicker = new DatePicker();
		datePicker.setShowOnFieldClick(true);
		data.add(datePicker);
		return data;
	}

	private Form<Component> criarForm(){
		Form<Component> form = new Form<Component>("form");
		form.add(this.criarData());
		this.criarHoraInicio(form);
		this.criarHoraFim(form);
		form.add(this.criarBtSalvar());
		return form;
	}
	private void criarHoraFim(Form<Component> form){

		ChoiceRenderer<HoraEnum> horaChoice = new ChoiceRenderer<HoraEnum>("valor");
		DropDownChoice<HoraEnum> hora = new DropDownChoice<HoraEnum>("horaFim", new PropertyModel<HoraEnum>(this,"horaFim"), Arrays.asList(HoraEnum.values()), horaChoice);

		ChoiceRenderer<MinutoEnum> minutoChoice = new ChoiceRenderer<MinutoEnum>("valor");
		DropDownChoice<MinutoEnum> minuto = new DropDownChoice<MinutoEnum>("minutoFim", new PropertyModel<MinutoEnum>(this, "minutoFim"), Arrays.asList(MinutoEnum.values()), minutoChoice);

		form.add(hora);
		form.add(minuto);
	}

	private void criarHoraInicio(Form<Component> form){

		ChoiceRenderer<HoraEnum> horaChoice = new ChoiceRenderer<HoraEnum>("valor");
		DropDownChoice<HoraEnum> hora = new DropDownChoice<HoraEnum>("horaInicio", new PropertyModel<HoraEnum>(this, "horaInicio"), Arrays.asList(HoraEnum.values()), horaChoice);

		ChoiceRenderer<MinutoEnum> minutoChoice = new ChoiceRenderer<MinutoEnum>("valor");
		DropDownChoice<MinutoEnum> minuto = new DropDownChoice<MinutoEnum>("minutoInicio", new PropertyModel<MinutoEnum>(this, "minutoInicio"), Arrays.asList(MinutoEnum.values()), minutoChoice);

		form.add(hora);
		form.add(minuto);
	}

	private void formataDataHora(StringBuilder dataString, Date data,  HoraEnum horaInicio, MinutoEnum minutoInicio){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(data);
		dataString.append(calendar.get(Calendar.DAY_OF_MONTH));
		dataString.append("/");
		dataString.append(calendar.get(Calendar.MONTH) + 1);
		dataString.append("/");
		dataString.append(calendar.get(Calendar.YEAR));
		dataString.append(" ");
		if(horaInicio.getValor() < 10){
			dataString.append("0");
		}
		dataString.append(horaInicio.getValor());
		dataString.append(":");
		if(minutoInicio.getValor() < 10){
			dataString.append("0");
		}
		dataString.append(minutoInicio.getValor());
	}

	public Date getDataPraticado() {
		return this.dataPraticado;
	}

	public HoraEnum getHoraFim() {
		return this.horaFim;
	}

	public HoraEnum getHoraInicio() {
		return this.horaInicio;
	}

	@Override
	public List<MenuPagina> getListaMenuPagina() {
		List<MenuPagina> menus = new ArrayList<MenuPagina>();
		Link<Pagina> link1 = new Link<Pagina>(MenuComponente.MENU_ID) {
			private static final long serialVersionUID = 1L;
			@Override
			public void onClick() {
				this.setResponsePage(PaginaCadastroDiaPraticadoGrupo.this.getPaginaRetorno());
			}
		};
		menus.add(new MenuPagina(link1, this.getMenuHome()));

		return menus;
	}

	public MinutoEnum getMinutoFim() {
		return this.minutoFim;
	}

	public MinutoEnum getMinutoInicio() {
		return this.minutoInicio;
	}

	@Override
	public void montarPagina() {
		super.montarPagina();
		this.addContainer(this.criarForm());
	}

	private void popularDiaPraticado(DiaPraticadoGrupo dia){
		if(this.dataPraticado != null){
			StringBuilder dataInicio = new StringBuilder();
			this.formataDataHora(dataInicio, this.dataPraticado, this.horaInicio, this.minutoInicio);
			dia.setDataHoraInicio(Util.converterStringToData(dataInicio.toString()));
			StringBuilder dataFim = new StringBuilder();
			this.formataDataHora(dataFim, this.dataPraticado, this.horaFim, this.minutoFim);
			dia.setDataHoraFim(Util.converterStringToData(dataFim.toString()));
		}
	}

	public void setDataPraticado(Date dataPraticado) {
		this.dataPraticado = dataPraticado;
	}

	public void setHoraFim(HoraEnum horaFim) {
		this.horaFim = horaFim;
	}

	public void setHoraInicio(HoraEnum horaInicio) {
		this.horaInicio = horaInicio;
	}

	public void setMinutoFim(MinutoEnum minutoFim) {
		this.minutoFim = minutoFim;
	}

	public void setMinutoInicio(MinutoEnum minutoInicio) {
		this.minutoInicio = minutoInicio;
	}

}
